/**
 * Created by liweisadleader on 26.03.15.
 */

var express = require('express'),
    http = require('http'),
    protectJSON = require('./lib/protectJSON'),
    favicon = require('serve-favicon'),
    morgan = require('morgan'),
    compression = require("compression"),
    bodyParser = require('body-parser'),
    methodOverride = require('method-override'),
    cookieParser = require('cookie-parser'),
    cookieSession = require('cookie-session'),
    fs = require('fs'),

    config = require('./config.js');

var app = express();
var accessLogStream = fs.createWriteStream(config.server.logfile, {flags: 'a'})

/***** 设置服务器 *****/
app.use(express.static(config.server.distFolder));                              // 设置客户端文件的路径
app.use(config.server.staticUrl, express.static(config.server.distFolder));     // 设置静态文件的路径
app.use(favicon(config.server.distFolder + '/favicon.png'));                    // 设置浏览器的 favicon 图标
app.use(protectJSON);                                                           // 应用我们的 protectJSON.js, 加强 json 的安全性
app.set('port', config.server.listenPort);                                      // 设置端口号
app.set('securePort', config.server.securePort);                                // 设置 https 模式下得端口号
app.use(morgan('combined', {stream: accessLogStream}))                          // 设置 logger
app.use(compression());                                                         // 对所有的请求进行压缩
app.use(config.server.staticUrl, compression());                                // 对所有的静态文件进行压缩
app.use(bodyParser.json());                                                     // 应用 bodyParser
app.use(methodOverride());                                                      // 应用 methodOverride
app.use(cookieParser(config.server.cookieSecret));                              // 应用 cookieParser
//  允许未登录用户以访客身份访问
app.use(cookieSession({name: config.server.cookieName, secret: config.server.cookieSecret}));

app.use(function(req, res, next) {
    var t="[" + new Date().toUTCString() + "]";
    if (req.user) {
        console.log(t, "- Current User:", req.user.username);
    } else {
        console.log(t, "- Unauthenticated");
    }
    next();
});

app.all('/*', function (req, res) {
    res.sendfile('index.html', { root:config.server.distFolder });
});

// 运行服务器
http.createServer(app).listen(config.server.listenPort, config.server.ip, function() {
    console.log("Code Craft - listening on port " + config.server.listenPort);
});